/**
 * @todo 获取当前时间 xxxx.xx.xx xx:xx:xx
 * @param date 
 */
export const formatTime = (date: Date) => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return (
    [year, month, day].map(formatNumber).join('/') +
    ' ' +
    [hour, minute, second].map(formatNumber).join(':')
  )
}

const formatNumber = (n: number) => {
  const s = n.toString()
  return s[1] ? s : '0' + s
}

/**
 * @todo 获取缓存值
 * @param key 
 */
export const getStorage = async (key: string) => {
  return new Promise((resolve, reject) => {
    wx.getStorage({
      key, success(res) {
        resolve(res.data);
      }, fail() {
        resolve(null);
      }
    })
  });
}

/**
 * 校验省份证正确性
 * @param tex 省份证号
 */
export function checkIdNumberValid(tex: any) {
  var tip = '输入的身份证号有误，请检查后重新输入！';
  var num = tex;
  // num = num.toUpperCase();

  var len, re;
  len = num.length;
  if (len == 0) return true;

  //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。    
  if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
    console.log(tip);
    return false;
  }

  //验证前两位地区是否有效 
  var aCity: any = {
    11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江", 31: "上海",
    32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北", 43: "湖南",
    44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏", 61: "陕西",
    62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外"
  }

  if (aCity[parseInt(num.substr(0, 2))] == null) {
    console.log(tip);
   
    return false;
  }

  //当身份证为15位时的验证出生日期。 
  if (len == 15) {
    re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
    var arrSplit = num.match(re);

    //检查生日日期是否正确  
    var dtmBirth: any = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
    var bGoodDay;
    bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
    if (!bGoodDay) {
      console.log(tip);
     
      return false;
    }
  }

  //当身份证号为18位时，校验出生日期和校验位。 
  if (len == 18) {
    re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
    var arrSplit = num.match(re);
    //检查生日日期是否正确  
    var dtmBirth: any = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
    var bGoodDay;
    bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
    if (!bGoodDay) {
      console.log(tip);
     
      return false;
    }
    else {
      //检验18位身份证的校验码是否正确。 
      //校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。 
      var valnum;
      var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      var nTemp = 0, i;
      for (i = 0; i < 17; i++) {
        nTemp += num.substr(i, 1) * arrInt[i];
      }
      valnum = arrCh[nTemp % 11];
      if (valnum != num.substr(17, 1)) {
        console.log(tip);
       
        return false;
      }
    }
  }
  return true;
}

/**
 * 消除首位空格
 * @param str 
 */
export const trimStr = (str: string) => {
  return str.replace(/(^\s*)|(\s*$)/g,"");
}